﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace LM.Tela.Desktop.Formularios
{
    using LM.InterfacesFabricas.DTOs;
    using LM.InterfacesFabricas.Fabricas;
    using LM.InterfacesFabricas.Interfaces.Servicos;
    using System.Collections.Generic;
    using System.Globalization;

    public partial class frmLocacao
    {
        public frmLocacao()
        {
            InitializeComponent();
        }

        private void LimpeCamposEdicao()
        {
            txtCodigo.Text = string.Empty;
            txtNomeCliente.Text = string.Empty;
            txtCPF.Text = string.Empty;
            txtDataHoraEntrada.Text = string.Empty;            
            txtDataHoraSaida.Text = string.Empty;
            cmbVeiculo.SelectedIndex = -1;
            cmbVaga.SelectedIndex = -1;
            cmbTabelaPreco.SelectedIndex = -1;
            cmbStatus.SelectedIndex = -1;
            cmbDependente.SelectedIndex = -1;
            cmbCliente.SelectedIndex = -1;
            rbMensal.Checked = false;
            rbRotativa.Checked = false;
            
        }

        private void CarregueItensJaCadastrados()
        {
            var servicoDeLocacao = FabricaGenerica.Crie<IServicoLocacao>();
            var locacoes = servicoDeLocacao.ConsulteTodos();

            gridLocacoes.DataSource = locacoes;
        }


        private bool EmEdicao()
        {
            return !string.IsNullOrWhiteSpace(txtCodigo.Text) && txtCodigo.Enabled == false;
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            int codigo;
            int.TryParse(txtCodigo.Text, out codigo);
            
            var locacao = new DtoLocacao { Codigo = codigo, NomeCliente = txtNomeCliente.Text, Cpf = txtCPF.Text, DataHoraEntrada = Convert.ToDateTime(txtDataHoraEntrada.Text), DataHoraSaida = Convert.ToDateTime(txtDataHoraSaida), ClienteID = ( ( DtoLocacao )cmbCliente.SelectedItem ).Codigo,  DependenteID = ( ( DtoLocacao )cmbDependente.SelectedItem ).Codigo, TabelaPrecoID = ( ( DtoLocacao )cmbTabelaPreco.SelectedItem ).Codigo,  VagaID = ( ( DtoLocacao )cmbVaga.SelectedItem ).Codigo, VeiculoID = ( ( DtoLocacao )cmbVeiculo.SelectedItem ).Codigo};

            var servicoDeLocacao = FabricaGenerica.Crie<IServicoLocacao>();
            if (!EmEdicao())
            {
                servicoDeLocacao.Cadastre(locacao);
            }
            else
            {
                servicoDeLocacao.Atualize(locacao);
            }

            PrepareTelaParaNovoRegistro();
        }

        private void PrepareTelaParaNovoRegistro()
        {
            LimpeCamposEdicao();
            CarregueItensJaCadastrados();
            txtCodigo.Enabled = true;
            txtCodigo.Focus();
            CarregarTabelaPreco();
        }

        private void label10_Click(object sender, EventArgs e)
        {

        }

        private void btnNovo_Click(object sender, EventArgs e)
        {
            PrepareTelaParaNovoRegistro();
        }

        private void btnExcluir_Click(object sender, EventArgs e)
        {
            if (!EmEdicao())
            {
                this.ExibaInconsistencia("Locação não selecionada para edição.");
            }
            else
            {
                var servicoDeLocacao = FabricaGenerica.Crie<IServicoLocacao>();
                servicoDeLocacao.Exclua(int.Parse(txtCodigo.Text));

                PrepareTelaParaNovoRegistro();
            }
        }

        private void CarregarTabelaPreco()
        {
            AdicionarItemComboBox(cmbTabelaPreco, FabricaGenerica.Crie<IServicoTabelaPreco>().ConsulteTodos(), "Nome", "Codigo");
        }

        private void AdicionarItemComboBox(ComboBox comboBox, dynamic lista, string valor, string chave)
        {
            comboBox.DataSource = lista;
            comboBox.DisplayMember = valor;
            comboBox.ValueMember = chave;
        }

        private void frmLocacao_Load(object sender, EventArgs e)
        {
            //CarregueItensJaCadastrados();
            PrepareTelaParaNovoRegistro();
        }

    }
}
